﻿using System;
using System.Collections.Generic;
using System.Text;
using Manager.App_Code.IDAL;
using Manager.App_Code.DTO;
using System.Data;

namespace Manager.App_Code.DAL
{
    class PhuThuDichVuDAL:StandardConnectDB,IPhuThuDichVu
    {
        public List<DTO.PhuThuDichVuDTO> GetlistPhuThuDichVu()
        {
            List<PhuThuDichVuDTO> listPhuThu = new List<PhuThuDichVuDTO>();
            DataTable dt = this.DTExecuteSelect("Select * from PhuThuDichVu");
            foreach (DataRow dr in dt.Rows)
            {
                listPhuThu.Add(ConvertObjectDataRowToPhuThuDichVuDTO(dr));
            }
            return listPhuThu;
            
        }

        public DataTable ReportHoaDonDichVu(long MaPhieuDangKy, string MaPhong)
        {
            Dictionary<string, object> paramlist = new Dictionary<string, object>();

            paramlist.Add("@MaPhieuDK", MaPhieuDangKy);
            paramlist.Add("@MaPhong", MaPhong);

            DataTable dt = DTExecuteSelect("SP_ReportHoaDonDichVu", paramlist);

            return dt;
         
        }



        public PhuThuDichVuDTO GetPhuThuDichVuByID(long MaptDV)
        {
            PhuThuDichVuDTO phuthu = new PhuThuDichVuDTO();
            Dictionary<string, object> paramlist = new Dictionary<string, object>();
            paramlist.Add("@MaPhuThu", MaptDV);
            DataTable dt = DTExecuteSelect("SP_PhuThuDichVu_GetByID", paramlist);
            phuthu = ConvertObjectDataRowToPhuThuDichVuDTO(dt.Rows[0]);
            return phuthu;
        }

        public List<DTO.PhuThuDichVuDTO> GetAllPhuThuDichVuByMaPhieuDat(long MaPhieuDat, string MaPhong)
        {
            List<PhuThuDichVuDTO> listPhuThu = new List<PhuThuDichVuDTO>();

            Dictionary<string, object> paramlist = new Dictionary<string, object>();

            paramlist.Add("@MaPhieuDangKy", MaPhieuDat);

            paramlist.Add("@MaPhong", MaPhong);

            DataTable dt = DTExecuteSelect("SP_PhuThuDichVu_GetByMaPhieuDat", paramlist);
            foreach (DataRow dr in dt.Rows)
            {
                listPhuThu.Add(ConvertObjectDataRowToPhuThuDichVuDTO(dr));
            }
            return listPhuThu;
        }

        public List<DTO.PhuThuDichVuDTO> GetAllPhuThuDichVuByMaPhong(string MaPhong)
        {
            throw new NotImplementedException();
        }

    

        public bool InsertPhuThuDichVu(DTO.PhuThuDichVuDTO phuthu)
        {
            Dictionary<string, object> paramlist = new Dictionary<string, object>();

            paramlist.Add("@MaPhuThu", phuthu.MaPhuThu);
            paramlist.Add("@MaPhieuDangKy", phuthu.MaPhieuDK.MaPhieu);
            paramlist.Add("@MaPhong", phuthu.MaPhong.MaPhong);
            paramlist.Add("@NhomDichVu", phuthu.NhomDichVu.MaNhomDV);
            paramlist.Add("@ThanhTien", phuthu.ThanhTien);
            paramlist.Add("@NgayTao", phuthu.NgayTao);


            return this.ExecuteUpdate("SP_PhuThuDichVu_Insert", paramlist);
        }


        public bool DeletePhuThuDichVu(DTO.PhuThuDichVuDTO phuthu)
        {
            Dictionary<string, object> paramlist = new Dictionary<string, object>();

            paramlist.Add("@MaPhuThu", phuthu.MaPhuThu);

            return this.ExecuteUpdate("SP_PhuThuDichVu_Delete", paramlist);
        }

        public bool UpdatePhuThuDichVu(DTO.PhuThuDichVuDTO phuthu)
        {
            Dictionary<string, object> paramlist = new Dictionary<string, object>();

            paramlist.Add("@MaPhuThu", phuthu.MaPhuThu);
            paramlist.Add("@MaPhieuDangKy", phuthu.MaPhieuDK.MaPhieu);
            paramlist.Add("@MaPhong", phuthu.MaPhong.MaPhong);
            paramlist.Add("@NhomDichVu", phuthu.NhomDichVu.MaNhomDV);
            paramlist.Add("@ThanhTien", phuthu.ThanhTien);
            paramlist.Add("@NgayTao", phuthu.NgayTao);


            return this.ExecuteUpdate("SP_PhuThuDichVu_Update", paramlist);

        }

        public DTO.PhuThuDichVuDTO ConvertObjectDataRowToPhuThuDichVuDTO(System.Data.DataRow dr)
        {
            if (dr != null)
            {
                PhuThuDichVuDTO phuthu = new PhuThuDichVuDTO();
                phuthu.MaPhuThu = long.Parse(dr["MaPhuThu"].ToString());

                IPhieuDangKy iphieudk = new PhieuDangKyDAL();
                phuthu.MaPhieuDK =  iphieudk.GetPhieuDangKyPhongByMaPhieu(long.Parse(dr["MaPhieuDangKy"].ToString()));

                IPhong iphong = new PhongDAL();
                phuthu.MaPhong = iphong.GetPhongByID(dr["MaPhong"].ToString());

                INhomDichVu inhomdv = new NhomDichVuDAL();
                phuthu.NhomDichVu = inhomdv.GetNhomDichVuByID(dr["NhomDichVu"].ToString());

                phuthu.ThanhTien = double.Parse(dr["ThanhTien"].ToString());

                phuthu.NgayTao = DateTime.Parse(dr["NgayTao"].ToString());

                return phuthu;
                
            }

            return null;

        }





        public int GetMaxMaPhieuPhuThu()
        {
            DataTable dt = this.DTExecuteSelect("SELECT MAX(MaPhuThu) AS MaxMaPhieu FROM dbo.PhuThuDichVu");
            string a = dt.Rows[0]["MaxMaPhieu"].ToString();
            if (a != "")
                return int.Parse(a)+1;
            return 1;
        }


      
    }
}
